编写智能合约
编写智能合约
- Solidity源文件的布局。
- 理解Solidity的数据类型。
- 合约的特殊变量和函数。
- 控制结构。
- 合约的结构和功能。
- 编译和部署合约。
3.1 Solidity源文件
Solidity源文件使用的扩展名为.sol.
pragma Solidity ^0.4.2;//声明编译器版本
3.2 智能合约的结构
- 状态变量 state variable
- 函数 function
- 函数修改器 function modifier
- 事件 event
- 结构 structure
- 枚举 enum
1 | //contract 关键字声明合约 |
3.3 数据位置
函数参数默认使用memory;
本地变量默认使用storage;
3.4 什么是不同的数据类型
bool
unit8 … unit256
int8 … int256
ufixedOX8 … ufixed0x256 分数
fixed0X8 … fixed0X256
address 最大20字节的值(16进制)存储以太坊地址
address 有两个属性:{
balance
send }
3.4.1 数组类型
支持generic和byte两种数组类型。
3.4.2 字符串类型
两种方法创建字符串 bytes string
string myString = “”;
bytes myRawString;
3.4.3 结构类型
struct
注意: 函数的参数和返回不能使结构类型
3.4.4 枚举类型
enum OS { Windows, Android, MacOX, Linux}
3.4.5 mapping类型
mapping(int => string) myMap;
3.4.6 delete操作符
delete array;
delete struct;
3.4.7 基本类型之间的转换
类型转换注意高位到低位得转换,高位会被丢失,精度不准。
3.4.8 使用var
注意:var不能用于定义数组array和map,也能用于定义函数参数和状态变量。
3.5 控制结构
if…else
3.6 用new操作符创建合约
ContractOne contractOne = new ContractOne();
3.7 异常
throw
3.8 外部函数调用
外部函数调用是指一个函数调用另一个合约的函数。
3.9 合约功能
合约新功能
3.9.1 可见性
函数和状态的默认可见性有四种:
函数的可见性默认为public
状态变量的可见性默认为internal
external
public 可行方法都可以访问
internal 内部访问 继承可以访问 不可以使用this访问
private 私有函数和私有状态变量属于内部函数,继承合约也不可以访问
3.9.2 函数修改器
3.9.3 回退函数
3.9.4 继承
3.10 库
3.11 返回多值
3.12 导入其他Solidity源文件
3.13 全局可用变量
3.14 以太币单位
3.15 存在,真实性和所有权合约的证明
3.16 编译和部署合约
3.17 总结合约
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Qin Blog!